<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>12-无限极分类</title>
</head>
<body>
    <script>
        /**
         *  无限极分类
         *  顶级分类 pid = 0
         *  {
         *      工业品-顶级 {cid:1,pid:0,name:'工业品'}
         *       {
         *          二级分类:
         *           {
         *              工具 {cid:4,pid:1,name:'工具'}
         *               {
         *                   三级分类
         *                   {
         *                      手动工具 {cid:5,pid:4,name:'手动工具'}
         *                      电动工具 {cid:8,pid:4,name:'电动工具'}
         *                      测量工具 {cid:9,pid:4,name:'电动工具'}
         *                   }
         *               }
         *              劳动防护 {cid:6,pid:1,name:'劳动防护'}
         *              安全消防 {cid:7,pid:1,name:'安全消防'}
         *           }
         *       }
         *      安装/维修/清洗-顶级 {cid:2,pid:0,name:'安装/维修/清洗'}
         *      机票/酒店-顶级 {cid:3,pid:0,name:'机票/酒店-顶级'}
         *  }
         * 
         * var obj = [
         *      {
         *          cid:1,
         *          pid:0,
         *          name:'工业品',
         *          children:[
         *              {
         *                cid:4,
         *                pid:1,
         *                name: '工具',
         *                children:[
         *                      {cid:5,pid:4,name:'手动工具',children:[]},
         *                      {cid:8,pid:4,name:'电动工具',children:[]},
         *                      {cid:9,pid:4,name:'电动工具',children:[]}
         *                ]
         *              }
         *          ]
         *      }
         * ];
         */

         const cates = [
            { cid: 1, pid: 0, name: '家用电器' },
            { cid: 2, pid: 0, name: '手机' },
            { cid: 3, pid: 1, name: '电视' },
            { cid: 4, pid: 1, name: '空调' },
            { cid: 5, pid: 3, name: '全面屏电视' },
            { cid: 6, pid: 4, name: '格力1.5匹' },
            { cid: 7, pid: 2, name: '华为p40' }
        ];
        
        /**
         * 递归函数
         * @param cates 传递的数组对象
         * @param pid=0 默认是一级分类
         * @return 返回组合好的分类数据
         */
        function channelCates(cates,pid=0){
            //过滤filter 可以返回一个新数组
            var newCates = cates.filter(function(val,index,arr){
                //console.log(val);
                if(val.pid==pid){//顶级，给对象添加一个属性children
                    val.children = channelCates(cates,val.cid);
                    //递归函数调用时必须加return返回
                    return true;
                }
            });
            return newCates;
        }
        var x = channelCates(cates);
        console.log(x);



    </script>
</body>
</html>